package com.zzy.service;


import com.zzy.model.CompleteParams;
import com.zzy.model.FlowStatus;
import com.zzy.model.TaskInfo;
import org.activiti.engine.task.Task;

import java.util.List;
import java.util.Map;

/**自定义的flow的工具service
 *  @Author zzy
 *  @Time 2018年11月21日
 */
public interface FlowService {
    /**启动一个流程*/
    public String startFlow(Map<String, Object> map, String processKey);
    /**取消启启动*/
    public void unStartFlow();
    /**获取下一个节点*/
    public void getNextNode();

    /**
     * 保存流程结束状态
     * @param flowStatus
     * @Author:ADMIN
     */
    public void saveActStatus(FlowStatus flowStatus);
    /**启动流程*/
    void createDeployment();


    /**
     * 查询用户的待办任务
     * @param userId 用户id
     * @param businessType 业务类型
     * @return  任务列表
     */
    public List<Map<String,Object>> findTask(String userId, String businessType);


    /**
     * 删除流程实例
     * @param processInstanceId 流程实例id
     */
    void delectProcessInstance(String processInstanceId);


    /**
     * 判断是否有退回权限
     * @param procInsId 流程实例
     * @return
     */
    boolean isBreach(String procInsId);


    /**
     * 根据流程实例ID查询当前流程任务
     * @param procInsId
     * @return
     * @author LiuZhanYo
     */
    TaskInfo getCurrentTask(String procInsId);

    /**
     * 审核
     * @param actParams
     * @author LiuZhanYo
     */
    void saveComplete(CompleteParams actParams);

    /**
     * 根据用户和流程实例查询下一个任务
     * @param procInsId 流程实例ID
     * @param userId	用户ID
     * @return
     * @author LiuZhanYo
     */
    Task getNextTask(String procInsId, String userId);

    /**
     * 挂起流程
     * @param procInsId
     * @Author:ADMIN
     */
    void saveSuspendProcessInstance(String procInsId);


    /***
     * 重新启用挂起的流程
     * @param procInsId
     * @Author:ADMIN
     */
    void saveActivateProcessInstance(String procInsId);


    /**
     * 消息通知提醒
     * @param taskId     任务ID
     * @param approve    审核结果
     * @param initiator  流程发起人
     * @param moduleName 模块名
     * @param stiName    项目名
     * @param stiId      项目Id
     * @param nodeName   节点名
     * @Author:ADMIN
     * @Description:
     */
    public void sendMessage(String taskId,String approve,String initiator,
                            String moduleName,String stiName,String stiId,String nodeName);


    /**
     * 跳转节点
     * @param executionId
     * @param desActivityId   目标节点
     * @param currentActivityId  当前节点
     * @param processDefinitionId  流程定义id
     * @Author:ADMIN
     */
    public void jumpTaskCmd(String executionId, String desActivityId,
                            String currentActivityId,String processDefinitionId);

    /**
     * 添加审核人
     * @param processInstanceId
     * @param ids
     * @Author:ADMIN
     */
    public void saveHandler(String processInstanceId,String ids);




    String getStatus(String processInstanceId);


    public void delectTask(String processInstanceId);
}
